/**
 * 比较两个村庄数据集，找出在noCodeData中但不在villageData中的村庄
 */

interface VillageWithCode {
  code: string
  name: string
}

interface VillageNoCode {
  name: string
}

// village.json的数据格式
interface VillageJsonItem {
  name: string
  coordinates: number[][]
}

interface VillageJson {
  [key: string]: VillageJsonItem
}

/**
 * 查找noCodeData中存在但villageData中不存在的村庄
 * @param noCodeData 无编码的村庄数据
 * @param villageData 有编码的村庄数据
 * @returns 在noCodeData中但不在villageData中的村庄列表
 */
export function findMissingVillages(
  noCodeData: VillageNoCode[],
  villageData: VillageWithCode[]
): VillageNoCode[] {
  // 创建一个Set来存储villageData中的所有村庄名称，便于快速查找
  const villageNames = new Set<string>()

  // 将villageData中的所有村庄名称添加到Set中
  villageData.forEach((village) => {
    villageNames.add(village.name)
  })

  // 过滤noCodeData，找出那些名称不在villageNames中的村庄
  const missingVillages = noCodeData.filter((village) => !villageNames.has(village.name))

  return missingVillages
}

/**
 * 按照village.json的格式校验数据，查找noCodeData中存在但villageJson中不存在的村庄
 * @param noCodeData 无编码的村庄数据
 * @param villageJson village.json格式的村庄数据
 * @returns 在noCodeData中但不在villageJson中的村庄列表
 */
export function validateByVillageJson(
  noCodeData: VillageNoCode[],
  villageJson: VillageJson
): VillageNoCode[] {
  // 创建一个Set来存储villageJson中的所有村庄名称，便于快速查找
  const villageNames = new Set<string>()

  // 将villageJson中的所有村庄名称添加到Set中
  Object.values(villageJson).forEach((village) => {
    villageNames.add(village.name)
  })

  // 过滤noCodeData，找出那些名称不在villageNames中的村庄
  const missingVillages = noCodeData.filter((village) => !villageNames.has(village.name))

  return missingVillages
}

/**
 * 使用示例
 */
// import { findMissingVillages } from '@/utils/compareVillages';
// import noCodeData from '@/json/公主岭 无编码数据.json';
// import villageData from '@/json/公主岭村+编码.json';
//
// const missingVillages = findMissingVillages(noCodeData, villageData);
// console.log('缺失的村庄数量:', missingVillages.length);
// console.log('缺失的村庄列表:', missingVillages);
